package com.hzhr.iot.huaweiiot.constant;

/**
 * 异常原因枚举
 * @author 48310
 *
 */
public enum ExceptionReasonEnum {
	JSON_CONVERT_ERROR("json转换错误"),
	
	IOT_DEVICE_ID_IS_NULL("物联网设备编号为空"),
	IOT_DEVICE_DEVICE_ID_IS_NULL("物联网设备设备号为空"),
	IOT_DEVICE_ID_NOT_EXIST("物联网设备不存在"),
	CURRENT_TIME_IS_NULL("当前时间为空"),
	CONTENT_IS_NULL("指令内容为空"),
	IP_IS_NULL("ip地址为空"),
	PORT_IS_NULL("端口号为空"),
	WAKE_TIME_IS_NULL("每天自醒时间为空"),
	WAKE_SEC_IS_NULL("自醒时长为空"),
	MESSAGE_FIELD_IS_NULL("报文字段为空"),
	ALARM_STAT_IS_NULL("异常统计为空"),
	CRC("crc校验错误"),
	
	DEVICESERVICE_ERROR("deivce-service调用失败"),

	REPORTSERVICE_ERROR("report-service调用失败"),

	MESSAGESERVICE_ERROR("message-service调用失败"),


	PARSING_MESSAGEID_IS_NULL("报文编号为空"),
	PARSING_IOT_DEVICE_DEVICE_ID_IS_NULL("物联网设备设备号为空"),
	PARSING_START_CODE_IS_NULL("起始码为空"),
	PARSING_END_CODE_IS_NULL("结束码为空"),
	PARSING_ENCRYPTED_BYTE_IS_NULL("加密字节为空"),
	PARSING_DATA_AREA_SIZE_IS_NULL("数据域长度为空"),
	PARSING_CRC_IS_NULL("crc校验码为空"),
	PARSING_MESSAGE_HEAD_ERROR("报文头错误"),
	PARSING_DATA_AREA_ERROR("数据域错误"),
	PARSING_CRC_CHECK_ERROR("crc校验错误"),
	PARSING_START_CODE_ERROR("起始码错误"),
	PARSING_END_CODE_ERROR("结束码错误"),
	PARSING_NULL_ERROR("空值错误"),
	PARSING_IOT_DEVICE_NOT_EXIST("物联网设备未注册或已删除"),
	PARSING_MESSAGE_SIZE_ERROR("报文长度错误"),
	
	PROCESSOR_NULL("命令处理器：空值错误"),
	
	SERVICEBEAN_NULL("服务bean：空值错误"),
	
	MODELGEN_NULL("模型生成失败：空值错误"),
	
	REPORTSERVICE_NULL("report-service调用失败：空值错误"),
	
	HUAWEIIOT_NULL("华为iot平台调用失败：空值错误"),
	
	HUAWEIIOT_UNKNOWN_ERROR("华为IoT平台错误：未知错误", "100000", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_PLATFORM_ERROR("华为IoT平台错误100008：平台错误", "100008", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_AUTH_ERROR("华为IoT平台错误100208：鉴权错误", "100208", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_SEND_COMMAND_INTERNAL_SERVER_ERROR("华为IoT平台错误100001：创建命令内部服务错误", "100001", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_PARAM_ERROR("华为IoT平台错误100022：请求参数非法", "100022", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_DATA_ERROR("华为IoT平台错误100023：平台内部数据库中数据异常", "100023", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_APPID_ERROR("华为IoT平台错误100203：请求参数携带的appId在平台未找到", "100203", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_APP_NOT_AUTH_ERROR("华为IoT平台错误100217：两个应用之间授权后，被授权的应用可以为授权的应用注册设备。接口请求参数中的appId用来传入授权的应用ID，若两个应用之间不存在授权关系，调用本接口会报这个错误。", "100217", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_COMMAND_UPLIMIT("华为IoT平台错误100223：缓存的命令数量超出最大值", "100223", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_DEVICE_DATA_NOT_EXIST("华为IoT平台错误100418：设备数据不存在", "100418", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_DEVICE_NOT_ONLINE("华为IoT平台错误100428：设备不在线", "100428", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_SERVICETYPE_NOT_EXIST("华为IoT平台错误100431：服务类型不存在", "100431", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_101016("华为IoT平台错误：平台内部报错101016", "101016", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION),
	HUAWEIIOT_101017("华为IoT平台错误：平台内部报错101017", "101017", ExceptionTypeEnum.HUAWEIIOT_EXCEPTION);
	
	private String message;
	private String code;
	private ExceptionTypeEnum exceptionType;
	private ExceptionReasonEnum(String message) {
		this.message = message;
	}
	private ExceptionReasonEnum(String message, String code) {
		this.message = message;
		this.code = code;
	}
	private ExceptionReasonEnum(String message, String code, ExceptionTypeEnum exceptionType) {
		this.message = message;
		this.code = code;
		this.exceptionType = exceptionType;
	}
	public String getMessage() {
		return message;
	}
	public String getCode() {
		return code;
	}
	public ExceptionTypeEnum getExceptionType() {
		return exceptionType;
	}
	
	
	public static ExceptionReasonEnum getEnumByCode(String code) {
		for (ExceptionReasonEnum exceptionReason : ExceptionReasonEnum.values()) {
			if (exceptionReason.getCode() != null && exceptionReason.getCode().equals(code)) {
				return exceptionReason;
			}
		}
		return null;
	}
}
